import 'dart:convert';

import 'package:crypto/crypto.dart' as cy;
import 'package:flutter/services.dart';

class StringUtil {
  // 纯数字
  static const String DIGIT_REGEX = "[0-9]+";

  // 含有数字
  static const String CONTAIN_DIGIT_REGEX = ".*[0-9].*";

  // 纯字母
  static const String LETTER_REGEX = "[a-zA-Z]+";

  // 包含字母
  static const String SMALL_CONTAIN_LETTER_REGEX = ".*[a-z].*";

  // 包含字母
  static const String BIG_CONTAIN_LETTER_REGEX = ".*[A-Z].*";

  // 包含字母
  static const String CONTAIN_LETTER_REGEX = ".*[a-zA-Z].*";

  // 纯中文
  static const String CHINESE_REGEX = "[\u4e00-\u9fa5]";

  // 仅仅包含字母和数字
  static const String LETTER_DIGIT_REGEX = "^[a-z0-9A-Z]+\$";
  static const String CHINESE_LETTER_REGEX = "([\u4e00-\u9fa5]+|[a-zA-Z]+)";
  static const String CHINESE_LETTER_DIGIT_REGEX =
      "^[a-z0-9A-Z\u4e00-\u9fa5]+\$";

  // 纯数字
  static bool isOnly(String input) {
    if (input.isEmpty) return false;
    return RegExp(DIGIT_REGEX).hasMatch(input);
  }

  // 含有数字
  static bool hasDigit(String input) {
    if (input.isEmpty) return false;
    return RegExp(CONTAIN_DIGIT_REGEX).hasMatch(input);
  }

  // 是否包含中文
  static bool isChinese(String input) {
    if (input.isEmpty) return false;
    return RegExp(CHINESE_REGEX).hasMatch(input);
  }

  // static String capture(String first, String second, String input) {
  //   int firstIndex = input.indexOf(first) + first.length;
  //   int secondIndex = input.indexOf(second);
  //   return input.substring(firstIndex, secondIndex);
  // }
  static String? capture(String first, String second, String input) {
    // 查找 first 的位置
    int firstIndex = input.indexOf(first);
    if (firstIndex == -1) {
      return null;
    }

    // firstIndex 指向 first 之后的部分
    firstIndex += first.length;

    // 查找 second 的位置
    int secondIndex = input.indexOf(second, firstIndex);
    if (secondIndex == -1 || secondIndex <= firstIndex) {
      return null;
    }

    return input.substring(firstIndex, secondIndex);
  }

  ///拷贝
  static void copyToClipboard(String text) async {
    await Clipboard.setData(ClipboardData(text: text));
  }



  /// md5加密
  static String md5String(String input) {
   return cy.md5.convert(utf8.encode(input)).toString();
  }
}
